/**
 * 
 */
package hb_Teach_InitObject_abstract;

/**
 * 平面中的一个点
 * @author Jiang Zhiyan
 *
 * 2021年4月15日 下午3:07:22
 */
public class Point {
	/** 
	*Java中对于属性（全局变量），系统会进行默认的初始化
	*
	*整数：0 ；浮点型：0.0 ；布尔型：false ； 字符型：'\u0000' ;对象类型： null
	*/
	//属性，全局变量，实例变量
  int x; //横坐标
  int y; //纵坐标
   
  /**
   * 构造器
   * 构造器：类实例化对象的根本途径
   * 
   * 类中如果没有声明任何构造器会默认提供无参数构造器。
   * 
   * 如果有其他的构造器的声明，系统不提供任何默认构造器。
   * 
   * 规则要求：1.构造器的名称与类名必须一致
   * 
   *          2.构造器没有返回值
   *          
   *          3.构造时，命名方式为 public Point (){} 其中不能加void或double ，否则都表示方法的意思
   *      
   * 另：构造器的重载：构造器中的参数类型不一致形成构造器的重载
   */
  public Point() { }; //最简单的构造器 = 默认构造器
  
  public Point(int x,int y) {
	  //this是类中的一个关键字，表示当前示例对象的引用。类似于第一人称的"我"
	  System.out.println("this = "+this); //即this的地址与对象中调用的构造器中p2的地址
	  this.x=x;
	  this.y=y;
	  System.out.println(this.x+"," +this.y);
  }
  public Point(int x) {
//	  this.x=x;
//	  this.y=y;
	   //通过this直接调用当前类的构造器，必须声明在构造器的第一行。
	  this(x,x); // 调用当前类中参数类型列表为（int，int）的构造器。
//	  System.out.println(this.x+"," +this.y);
  }
 
  /**
   * 声明一个点到另一个点之间的距离
   * 
   * distance方法中，this可以表示当前点，other表示另一个点
   * 
   */

  public double distance(Point other) { //Point 示例名  
	  System.out.println("this的x值:"+this.x+"other的x值："+other.x);
	  return Math.sqrt(Math.pow(this.x-other.x,2)+Math.pow(this.y-other.y,2));
  }
  /**
   * 方法的重载
   * 
   * Java中在用一个类中，方法名相同，参数类型列表不同称为方法的重载。 
   * 
   */
  public double distance(int x,int y) {
	  //this.distance 表示调用当前类中的方法。
	  return this.distance(new Point (x,y));
  }
  /**
   * 到原点的距离
   */
  public double distance() {
	  return this.distance(0,0);
  }
}
